package com.company.list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

//https://blog.csdn.net/jdsjlzx/article/details/41654295
//LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用
public class LinkedTest {


    public static void main(String[] args) {
        LinkedList<String> lList = new LinkedList<String>();
        lList.add("1");
        lList.add("2");
        lList.add("3");
        lList.add("4");
        lList.add("5");


        System.out.println("链表的第一个元素是 : " + lList.getFirst());
        System.out.println("链表最后一个元素是 : " + lList.getLast());

        for (String s : lList) {
            System.out.println(s);
        }

        System.out.println("-------------------------");
        //截取子表
        List<String> sub1 = lList.subList(1, 4);
        System.out.println(sub1); //截取后，还剩 2,3,4
        sub1.remove(2);  //List接口提供的按索引删除, 这里index=2的元素4被删除
        System.out.println(sub1);  // 2,3
        //子表元素被删后，父表也受到影响，即没有了元素4
        System.out.println(lList); //1,2,3,5

//-------------------------------------------------------

        LinkedList<String> lkList = new LinkedList<>();
        lkList.add("A");
        lkList.add("B"); // 如果不指定索引的话，元素将被添加到链表的最后
        lkList.add("C");
        lkList.add("D");
        lkList.addFirst("X"); //把元素添加到 第一个位置
        lkList.addLast("Z"); //把元素添加到最后一个位置
        System.out.println(lkList);

        lkList.removeFirst(); //删掉第一个元素
        lkList.removeLast();  //删掉最后一个元素
        System.out.println(lkList);

        //链表 转 数组列表
        ArrayList<String> arrayList = new ArrayList<String>(lkList);
        for (String s : arrayList) {
            System.out.println("s = " + s);
        }

        //链表 转 数组
        String[] my = lkList.toArray(new String[lkList.size()]);
        for (int i = 0; i < my.length; i++) {
            System.out.println(my[i]);
        }

        //链表元素替换
        lkList.set(1, "J"); //index=1的元素替换为J
        System.out.println(lkList);

        //清空链表
        lkList.clear();
        System.out.println(lkList);


    }

}
